x86/hvm: unconditionally buffer writes to VRAM
authorPaul Durrant <paul.durrant@citrix.com>
Thu, 16 Jul 2015 09:50:41 +0000 (11:50 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 16 Jul 2015 09:50:41 +0000 (11:50 +0200)
commitd1b531631515009281829b736ec050f5d6fb0c63
tree73f37a78516b7b47009c9afc76c60830cfa5edcf
parenta8bc99b981c5ad773bd646f5986e616d26fb94d7
x86/hvm: unconditionally buffer writes to VRAM

When c/s 3bbaaec09 "unify stdvga mmio intercept with standard mmio
intercept" was added, a small semantic change was made. Prior to
this patch the hypervisor unconditionally sent all guest writes
to the VGA aperture as buffered ioreqs, whereas after the patch it
only does this when the VGA model is in 'stdvga' mode (sequencer
register #7 == 0).

When installing Windows 7 (64-bit) using the default QEMU VGA model
(== cirrus), Windows leaves 'stdvga' mode early in boot and hence
all further writes to the VGA aperture are done using synchronous
ioreqs which slows down boot by several orders of magnitude (thanks
to the elaborate splash screen that Windows presents). This can be
viewed as a regression and so this patch re-instates previous
buffering behaviour.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Tested-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper@citrix.com>
xen/arch/x86/hvm/stdvga.c